package demo.javaMail;

import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import javax.imageio.ImageIO;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.Properties;

//@ComponentScan
////@PropertySource("classpath:properties/javamail.properties")
////@Aspect
@Component
public class JavaMailUtil {

//    //发件人地址
//    @Value("${send_address}")
//    private static String senderAddress ;
//    //收件人地址
//    @Value("${recipient_address}")
//    private static  String recipientAddress ;
//    //发件人账户名
//    @Value("${sender_account}")
//    private static String senderAccount ;
//    // 我的邮箱
//    @Value("${my_address}")
//    private static String myAddress ;
//    @Value("${base_address}")
//    private static String baseAddress ;
//    //发件人账户密码
//    @Value("${sender_password}")
//    private static String senderPassword  ;

    //发件人地址
    private static String senderAddress = "18578793709@163.com";
    //收件人地址
    private static String recipientAddress = "1393568105@qq.com";
    //发件人账户名
    private static String senderAccount = "18578793709@163.com";
    // 我的邮箱
    public static String myAddress = "18392601070@163.com";
    public static String baseAddress = "18578793709@163.com";
    //发件人账户密码
    private static String senderPassword = "guofei.123456";


    public static void  sendTestEmails()   {
        //1、连接邮件服务器的参数配置
        Properties props = new Properties();
        //设置用户的认证方式
        props.setProperty("mail.smtp.auth", "true");
        //设置传输协议
        props.setProperty("mail.transport.protocol", "smtp");
        //设置发件人的SMTP服务器地址
        props.setProperty("mail.smtp.host", "smtp.163.com");
        //2、创建定义整个应用程序所需的环境信息的 Session 对象
        Session session = Session.getInstance(props);
        //设置调试信息在控制台打印出来
        session.setDebug(true);
        //3、创建邮件的实例对象
        //创建一封邮件的实例对象
        MimeMessage msg = new MimeMessage(session);
        //设置发件人地址
        try {
            msg.setFrom(new InternetAddress(senderAddress));
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        try {
            /*
             * 设置收件人地址（可以增加多个收件人、抄送、密送），即下面这一行代码书写多行
             * MimeMessage.RecipientType.TO:发送
             * MimeMessage.RecipientType.CC：抄送
             * MimeMessage.RecipientType.BCC：密送
             */
            msg.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(recipientAddress));
            //设置邮件主题
            msg.setSubject("邮件主题","UTF-8");
            //设置邮件正文
            msg.setContent("简单的纯文本邮件！"+ Calendar.getInstance().getTime(), "text/html;charset=UTF-8");
            //设置邮件的发送时间,默认立即发送
            msg.setSentDate(new Date());
            //4、根据session对象获取邮件传输对象Transport
            Transport transport = session.getTransport();
            //设置发件人的账户名和密码
            transport.connect(senderAccount, senderPassword);
            //发送邮件，并发送到所有收件人地址，message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
            transport.sendMessage(msg,msg.getAllRecipients());
            //如果只想发送给指定的人，可以如下写法
            //transport.sendMessage(msg, new Address[]{new InternetAddress("xxx@qq.com")});
            //5、关闭邮件连接
            transport.close();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

}
